////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2012 Kentaro Sekimoto  All rights reserved.
////////////////////////////////////////////////////////////////////////////

#ifndef FM3_GPIO_MB9BF506N_H_
#define FM3_GPIO_MB9BF506N_H_

#include <tinyhal.h>
#include "FM3_GPIO.h"

#if 0
const UINT8 c_GPIO_Attributes[FM3_GPIO_MAX_PINS] =
{
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P00
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P01
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P02
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P03
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P04
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P05
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P06
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P07
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P08
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P09
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P0A
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P0B
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P0C
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P0D
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P0E
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P0F

        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P10
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P11
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P12
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P13
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P14
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P15
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P16
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P17
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P18
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P19
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P1A
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P1B
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P1C
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P1D
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P1E
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P1F

        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P20
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P21
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P22
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P23
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P24
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P25
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P26
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P27
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P28
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P29
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P2A
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P2B
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P2C
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P2D
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P2E
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P2F

        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P30
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P31
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P32
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P33
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P34
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P35
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P36
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P37
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P38
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P39
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P3A
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P3B
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P3C
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P3D
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P3E
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P3F

        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P40
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P41
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P42
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P43
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P44
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P45
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P46
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P47
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P48
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P49
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P4A
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P4B
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P4C
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P4D
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P4E
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P4F

        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P50
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P51
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P52
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P53
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P54
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P55
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P56
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P57
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P58
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P59
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P5A
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P5B
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P5C
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P5D
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P5E
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P5F

        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P60
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P61
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P62
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P63
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P64
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P65
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P66
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P67
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P68
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P69
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P6A
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P6B
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P6C
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P6D
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P6E
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P6F

        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P70
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P71
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P72
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P73
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P74
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P75
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P76
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P77
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P78
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P79
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P7A
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P7B
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P7C
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P7D
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P7E
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P7F

        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P80
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P81
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P82
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P83
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P84
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P85
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P86
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P87
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P88
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P89
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P8A
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P8B
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P8C
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P8D
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT,    // P8E
        GPIO_ATTRIBUTE_INPUT | GPIO_ATTRIBUTE_OUTPUT     // P8F
};
#endif

#ifdef USE_FM3_GPIO_EXT_INT
UINT8 m_GPIO_IrqToPin[8];

struct FM3_INT_PIN c_GPIO_ToPin[] = {
        {P50, P05, P0A},    // INT00
        {P51, P06, P24},    // INT01
        {P52, P11, P27},    // INT02
        {P63, P14, P30},    // INT03
        {P33, P17, P31},    // INT04
        {P20, P1A, P32},    // INT05
        {PPP, P21, P4E},    // INT06
        {PPP, PPP, P53},    // INT07
        {PPP, P35, P56},    // INT08
        {PPP, P36, P59},    // INT09

        {PPP, P37, P64},    // INT10
        {PPP, P38, P66},    // INT11
        {PPP, P40, P68},    // INT12
        {PPP, P41, P71},    // INT13
        {PPP, P48, P72},    // INT14
        {PPP, P60, P73},    // INT15
        {PPP, PPP, PPP},    // INT16
        {PPP, PPP, PPP},    // INT17
        {PPP, PPP, PPP},    // INT18
        {PPP, PPP, PPP},    // INT19

        {PPP, PPP, PPP},    // INT20
        {PPP, PPP, PPP},    // INT21
        {PPP, PPP, PPP},    // INT22
        {PPP, PPP, PPP},    // INT23
        {PPP, PPP, PPP},    // INT24
        {PPP, PPP, PPP},    // INT25
        {PPP, PPP, PPP},    // INT26
        {PPP, PPP, PPP},    // INT27
        {PPP, PPP, PPP},    // INT28
        {PPP, PPP, PPP},    // INT29

        {PPP, PPP, PPP},    // INT30
        {PPP, PPP, PPP}     // INT31
};

UINT8 c_GPIO_IntNo[] = {
        NOINT,      // P00
        NOINT,      // P01
        NOINT,      // P02
        NOINT,      // P03
        NOINT,      // P04
        INTNO(0,1), // P05
        INTNO(1,1), // P06
        NOINT,      // P07
        NOINT,      // P08
        NOINT,      // P09
        INTNO(0,2), // P0A
        NOINT,      // P0B
        NOINT,      // P0C
        NOINT,      // P0D
        NOINT,      // P0E
        NOINT,      // P0F

        NOINT,      // P10
        INTNO(2,1), // P11
        NOINT,      // P12
        NOINT,      // P13
        INTNO(3,1), // P14
        NOINT,      // P15
        NOINT,      // P16
        INTNO(4,1), // P17
        NOINT,      // P18
        NOINT,      // P19
        NOINT,      // P1A
        NOINT,      // P1B
        NOINT,      // P1C
        NOINT,      // P1D
        NOINT,      // P1E
        NOINT,      // P1F

        INTNO(5,0), // P20
        INTNO(6,1), // P21
        NOINT,      // P22
        NOINT,      // P23
        INTNO(1,2), // P24
        NOINT,      // P25
        NOINT,      // P26
        INTNO(2,2), // P27
        NOINT,      // P28
        NOINT,      // P29
        NOINT,      // P2A
        NOINT,      // P2B
        NOINT,      // P2C
        NOINT,      // P2D
        NOINT,      // P2E
        NOINT,      // P2F

        INTNO(3,2), // P30
        INTNO(4,2), // P31
        INTNO(5,2), // P32
        INTNO(4,0), // P33
        NOINT,      // P34
        INTNO(8,1), // P35
        INTNO(9,1), // P36
        INTNO(10,1),// P37
        INTNO(11,1),// P38
        NOINT,      // P39
        NOINT,      // P3A
        NOINT,      // P3B
        NOINT,      // P3C
        NOINT,      // P3D
        NOINT,      // P3E
        NOINT,      // P3F

        INTNO(12,1),// P40
        INTNO(13,1),// P41
        NOINT,      // P42
        NOINT,      // P43
        NOINT,      // P44
        NOINT,      // P45
        NOINT,      // P46
        NOINT,      // P47
        INTNO(14,1),// P48
        NOINT,      // P49
        NOINT,      // P4A
        NOINT,      // P4B
        NOINT,      // P4C
        NOINT,      // P4D
        NOINT,      // P4E
        NOINT,      // P4F

        INTNO(0,0), // P50
        INTNO(1,0), // P51
        INTNO(2,0), // P52
        INTNO(7,2), // P53
        NOINT,      // P54
        NOINT,      // P55
        INTNO(8,2), // P56
        NOINT,      // P57
        NOINT,      // P58
        INTNO(9,2), // P59
        NOINT,      // P5A
        NOINT,      // P5B
        NOINT,      // P5C
        NOINT,      // P5D
        NOINT,      // P5E
        NOINT,      // P5F

        INTNO(15,1),// P60
        NOINT,      // P61
        NOINT,      // P62
        INTNO(3,0), // P63
        INTNO(10,2),// P64
        NOINT,      // P65
        INTNO(11,2),// P66
        NOINT,      // P67
        INTNO(12,2),// P68
        NOINT,      // P69
        NOINT,      // P6A
        NOINT,      // P6B
        NOINT,      // P6C
        NOINT,      // P6D
        NOINT,      // P6E
        NOINT,      // P6F

        NOINT,      // P70
        INTNO(13,2),// P71
        INTNO(14,2),// P72
        INTNO(15,2),// P73
        NOINT,      // P74
        NOINT,      // P75
        NOINT,      // P76
        NOINT,      // P77
        NOINT,      // P78
        NOINT,      // P79
        NOINT,      // P7A
        NOINT,      // P7B
        NOINT,      // P7C
        NOINT,      // P7D
        NOINT,      // P7E
        NOINT,      // P7F
};
#endif

#endif /* FM3_GPIO_MB9BF506N_H_ */
